#ifndef SYSTEMCONTROL_H
#define SYSTEMCONTROL_H

#include "rule.h"
#include "mainwindow.h"
#include "matrixviewer.h"
#include "fuzzyeditor.h"
#include "fuzzycontroller.h"

class MainWindow;
class MatrixViewer;
class FuzzyEditor;
class FuzzyController;

class SystemControl
{
public:
    SystemControl();

    ~SystemControl();

    /** Getters for all the window objects that this system is responsible for
     */
    inline FuzzyController* getFuzzyController() const
                            { return m_fuzzy_controller; }
    inline FuzzyEditor*     getEditorWindow()    const
                            { return m_fuzzy_editor; }
    inline MainWindow*      getMainWindow()      const
                            { return m_main_window; }
    inline MatrixViewer*    getMatrixWindow()    const
                            { return m_matrix_viewer; }

    const QString getOctavePath();
    int getOctaveResolution();

private:

    /** The master fuzzy controller that will handle all of the fuzzy logic
     * that this program will undoubtably need to be able to do.
     */
    FuzzyController* m_fuzzy_controller;

    /** The main window for the program */
    MainWindow* m_main_window;

    /** The window that will display the output matrix */
    MatrixViewer* m_matrix_viewer;

    /** The window that manages complex editing of fuzzy sets */
    FuzzyEditor* m_fuzzy_editor;

};

#endif // SYSTEMCONTROL_H
